package com.jsecode.protocol.gid22.entity;

import com.jsecode.protocol.gid22.GidBody;

import io.netty.buffer.ByteBuf;

public class GidCANStatusFlag extends GidBody {
    public byte status; 
                //    bit7   Security Status
                //    bit6   Door Status
                //    bit5   Window Status
                //    bit4   Lock Status
                //    bit5   Light Status
    public byte security; // 1   u8
                            // Bit7 1/0  ON/OFF    ACC状态
                            // Bit6 1/0  设防/撤防 设防撤防状态
    public byte door;    // 1   u8
                            //    Bit7 1/0  开/关  左前门LF  
                            //    Bit6 1/0  开/关  右前门RF  
                            //    Bit5 1/0  开/关  左后门LB  
                            //    Bit4 1/0  开/关  右后门RB  
                            //    Bit3 1/0  开/关  后备箱TRUNK   
    public byte window;  // 1   u8
                            //    Bit7 1/0  开/关  左前窗LF  
                            //    Bit6 1/0  开/关  右前窗RF  
                            //    Bit5 1/0  开/关  左后窗LB  
                            //    Bit4 1/0  开/关  右后窗RB   
    public byte lock;    // 1   u8
                            //    Bit7 1/0  落锁/开锁  左前锁LF  
                            //    Bit6 1/0  落锁/开锁  右前锁RF  
                            //    Bit5 1/0  落锁/开锁  左后锁LB  
                            //    Bit4 1/0  落锁/开锁  右后锁RB  
                            //    Bit3 1/0  落锁/开锁  后备箱锁TRUNK    
    public byte light;
    
    public GidCANStatusFlag(byte status){
        this.status = status;
    }

    public boolean isSecurity() {
        return isBitOne(status, 7);
    }
    
    public boolean isDoor() {
        return isBitOne(status, 6);
    }
    
    public boolean isWindow() {
        return isBitOne(status, 5);
    }
    
    public boolean isLock() {
        return isBitOne(status, 4);
    }
    
    public boolean isLight() {
        return isBitOne(status, 3);
    }
    
    @Override
    public int unpack(ByteBuf srcBuf){
        if (isSecurity()) {
            security = srcBuf.readByte();
        }
        if (isDoor()) {
            door = srcBuf.readByte();
        }
        if (isWindow()) {
            window = srcBuf.readByte();
        }
        if (isLock()) {
            lock = srcBuf.readByte();
        }
        // TODO: 目前协议里面没有
        if (isLight()) {
            light = srcBuf.readByte();
        }
       
            
        return 0;
    }
    
    @Override
    public String toString(){
        return "";
    }

    /**
     * @param uByte 
     * @param bitIndex 表示bit0, bit1,...
     *
     */
    private static boolean isBitOne(byte uByte, int bitIndex) {
        return ((uByte&(0x1<<bitIndex))>0);
    }
    
    public static void main(String[] argv) {
        System.out.println(isBitOne((byte)0x08,3));
    }
}
